<?php 

Secutiry::allow(
array('ProdutosController' 	=> array(
            'index'   			=> array('required' => true,   'perfil' => array(PerfilAcesso::$cliente), 'pagina'=>'/home/seguranca'),
)
)
);

class ProdutosController extends Controller{
	
	private $objRetorno;
	private $carrinho;
	
	public function __construct(){
		$pagina = Route::getRoutes(Uri::getUri(0));
		$pagina =  (key_exists('pagina', $pagina)) ? $pagina['pagina'] : Uri::getUri(0);
	
		$this->objRetorno['pagina'] = 'site/' . $pagina;
		$this->objRetorno['head'] = 'site/head';
	}
	
	public function index(){
	  $idRestaurante = Uri::getUri(2);
    if(!$idRestaurante){
      header("Location: /");
    }
		$usuario = Session::getValue('user');
		$this->objRetorno['logged'] = $usuario?1:0;
    
		$enderecoModel = new EnderecoModel();
		$endereco = $enderecoModel->buscarEnderecosPrincipal($usuario['id_usuario']);
		$this->objRetorno['endereco'] = $endereco;
		
    $restauranteModel = new RestauranteModel();
    $restaurante = $restauranteModel->select(array('id'=>$idRestaurante));
    $enderecoRestaurante = $enderecoModel->buscarEnderecosPorUsuario($idRestaurante,'r');
    $enderecoRestaurante[0]['telefone'] = Utils::formataTelefone($enderecoRestaurante[0]['telefone']);
    $restaurante[0]['end'] = $enderecoRestaurante;
    $restaurante[0]['taxa_entrega'] = Utils::formataMoeda($restaurante[0]['taxa_entrega']); 
    $restaurante[0]['vlr_minimo'] = Utils::formataMoeda($restaurante[0]['vlr_minimo']);
    $this->objRetorno['restaurante'] = $restaurante;
    
    $cardapioController = new CardapioController();
    $cardapios = $cardapioController->buscarCardapiosPorRestaurante($idRestaurante);
    foreach($cardapios as &$c){
      $produtoModel = new ProdutoModel();
      $produtos = $produtoModel->buscarProdutosPorCardapio($c['id']);
      foreach($produtos as &$p){
        $preco = floatval($p['preco']);
        $calculoPreco = $produtoModel->calculaPreco($p['id']); 
        $preco += floatval($calculoPreco['dif_preco']);
        $p['preco'] = Utils::formataMoeda($preco);
      }
      $c['produtos'] = $produtos;
    }
    $this->objRetorno['cardapios'] = $cardapios;
    
		if(!is_null($this->carrinho)){
			$this->objRetorno['carrinho'] = $this->carrinho;
		}
		self::render('site/home' , $this->objRetorno);
  }

  public function adicionarProdutoCarrinho(){
    $dados = Uri::getPOST("json");
	
  	$arrVariacao = array();
  
  	foreach($dados as $k => $v){
  		$key = explode('_', $k);
  		
  		if($key[0] == 'x'){
  			if(count($key) == 2){
  				array_push($arrVariacao, array($key[1], $v));
  			}else if(count($key) == 3){
  				if($v == 1){
  					array_push($arrVariacao, array($key[1], $key[2]));
  				}
  			}
  		}
  	}

    $usuario = Session::getValue('user');
    $carrinhoModel = new CarrinhoModel();
    
    if($dados->p_prpe)
    {
      $objProduto = array('preco'=>$dados->p_prec, 'qtde'=>$dados->qtde, 'observacoes'=>$dados->obs, 'id_produto_pedido'=>$dados->p_prpe, 'variacoes' => $arrVariacao);
      $carrinhoModel->atualizarProdutoCarrinho($objProduto);
    }
    else {
      if(!$dados->p_pedi){
        $pedido = array('id_cliente'=>$usuario['id_usuario'],'id_restaurante'=>$dados->id_restaurante,'session_id'=>session_id());
        $dados->p_pedi = $carrinhoModel->criarPedido($pedido);
      }
      
      if($dados->p_pedi){
        $objProduto = array('id_pedido'=>$dados->p_pedi,'id_produto'=>$dados->p_prod, 'qtde'=>$dados->qtde, 'observacoes'=>$dados->obs, 'preco'=>$dados->p_prec, 'variacoes' => $arrVariacao);
        $carrinhoModel->adicionarProdutoCarrinho($objProduto);
      }
    }
    echo json_encode($dados);
  }

  public function removerProdutoCarrinho(){
    $dados = Uri::getPOST("json");
    $usuario = Session::getValue('user');
    $carrinhoModel = new CarrinhoModel();
    if($dados->p_prpe){
      $objProduto = array('id_cliente'=>$usuario['id_usuario'],'id_restaurante'=>$dados->id_restaurante,'session_id'=>session_id(),'id_produto_pedido'=>$dados->p_prpe);
      $ret = $carrinhoModel->removerProdutoCarrinho($objProduto);
    }
    echo json_encode($ret);
  }
  
  public function buscarCarrinho(){
    $dados = Uri::getPOST("json");
    $usuario = Session::getValue('user');
    $id_restaurante = $dados->id_restaurante;
    $carrinhoModel = new CarrinhoModel();
    $objCarrinho = array('id_restaurante'=>$id_restaurante, 'id_usuario'=>$usuario['id_usuario'], 'session_id'=>session_id());
    $carrinho = $carrinhoModel->buscarProdutosCarrinho($objCarrinho);
    $restauranteModel = new RestauranteModel();
    $restaurante = $restauranteModel->select(array('id'=>$id_restaurante));
    $total=0;
    foreach($carrinho as &$c){
      $total+=$c['preco'];
      $c['preco']=Utils::formataMoeda($c['preco']);
    }
    $this->objRetorno['carrinho']=$carrinho;
    $total+=$restaurante[0]['taxa_entrega'];
    $restaurante[0]['taxa_entrega']=Utils::formataMoeda($restaurante[0]['taxa_entrega']);
    $this->objRetorno['restaurante']=$restaurante;
    $this->objRetorno['total']=Utils::formataMoeda($total);
    $this->objRetorno['id_pedido'] = $carrinho[0]['id_pedido'];
    $ret['html'] = self::render('site/carrinho', $this->objRetorno, true);
    echo json_encode($ret);
  }

  public function buscarProduto(){
    $dados = Uri::getPOST("json");
    $id=$dados->id_produto;
    $produtoModel = new ProdutoModel();
    $produto = $produtoModel->select(array('id'=>$id), null, TRUE);
    $carrinhoModel = new CarrinhoModel();
    if($dados->id_produto_pedido){
      $produtoPedido = $carrinhoModel->buscarProdutoPedido($dados->id_produto_pedido);
      $produto['produtoPedido'] = $produtoPedido;
    }
    $produto['variacoes'] = $this->variacoes($id,$dados->id_produto_pedido);
    $produto['foto'] = "";
    $filename = "/app/resources/uploads/produtos/".$produto['id']."/".$produto['id'].".jpg";
    if(file_exists($_SERVER{'DOCUMENT_ROOT'}.$filename)){
      $produto['foto'] = $filename;
    }
    echo json_encode($produto);
  }

  private function variacoes($idProduto, $idProdutoPedido = NULL){
    $produtoModel = new ProdutoModel();
    $variacoes = $produtoModel->buscarVariacoesProduto($idProduto);
    foreach($variacoes as &$v){
      $v['itens'] = $produtoModel->buscarItensVariacao($v['id']);
      
      foreach($v['itens'] as &$i){
        $i['dif_preco'] = str_replace('.', ',', $i['dif_preco']);
        if($idProdutoPedido)unset($i['selecionado']);
      }
      if($v['max_select'] != 1){
        $v['check'] = 1;
      }
    }
    $variacoesSelecionadas = array();
    if($idProdutoPedido){
      $pedidoModel = new PedidoModel();
      $variacoesSelecionadas = $pedidoModel->buscarVariacoesPorProdutoPedido($idProdutoPedido);
    }
    $this->objRetorno['selecionados'] = $variacoesSelecionadas;
    $this->objRetorno['variacoes'] = $variacoes;
    $ret = self::render('site/variacoes', $this->objRetorno, true);
    return $ret;
  }
}

?>

